package com.zsjt.basic.sort;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author zhanb
 * @Auther ZhanBo
 * @Date 2020/5/19
 */
public class BubbleSort {


    public static void main(String[] args) {

        int array[] ={3,9,-1,10,20};
        test(100000);
    }

    /**
     * 冒泡排序
     * @param array
     */
    public static void sort(int array[]){
        int temp=0;
        for (int i = 0 ; i < array.length - 1 ; i++) {
            for (int j = 0 ; j < array.length - 1 - i; j++){
                if(array[j] > array[j+1]){
                    temp = array[j+1];
                    array[j+1] = array[j];
                    array[j] = temp;
                }
            }
        }
    }

    /**
     * 优化冒泡排序
     * @param array
     */
    public static void sort2(int array[]){
        int temp=0;
        boolean flag =false;
        for (int i = 0 ; i < array.length - 1 ; i++) {
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (array[j] > array[j + 1]) {
                    flag = true;
                    temp = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = temp;
                }
            }
            //System.out.println("第"+(i+1)+"趟排序"+Arrays.toString(array))
            if(!flag) {
                //如果这一轮没有交换位置则跳出排序
                break;
            } else {
                //检查下一轮是否有排序
                flag = false;
            }
        }
    }

    /**
     * 测试冒泡的时间
     * @param n
     */
    public static void test(int n){
        //测试冒泡排序O(n^2)的速度，给80000个数据
        int  [] arr= new int [n];
        for (int i =0 ;i<arr.length;i++)
            arr[i] = (int) (Math.random()*n);

        Date date1 = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("排序前"+simpleDateFormat.format(date1));

        sort2(arr);

        Date date2 = new Date();
        System.out.println("排序后"+simpleDateFormat.format(date2));
    }
}
